package cn.com.easy.permission.service.system.zookeeper;


/**
 * zookeeper服务类
 * 
 * @author nibili 2016年1月7日
 * 
 */
//@Component
//@Lazy(false)
public class ZooKeeperService {
//
//	/** 配置文件配置类 */
//	@Autowired
//	private ZooKeeperPropertyPlaceholderConfigurer zooKeeperPropertyPlaceholderConfigurer;
//	/** zookeeper根路径 */
//	private String rootPath = "";
//
//	/** zookeeper服务器字符串 */
////	@Value("${zk.servers}")
//	private String zkServers;
//
//	/** zookeeper服务类 */
//	private cn.com.easy.zookeeper.ZooKeeperService zkService;
//
//	@PostConstruct
//	public void init() throws Exception {
//		zkService = new cn.com.easy.zookeeper.ZooKeeperService(zkServers);
//		this.rootPath = zooKeeperPropertyPlaceholderConfigurer.getRootPath();
//		this.create(this.rootPath, this.rootPath.getBytes("UTF-8"));
//	}
//
//	/**
//	 * function:</b>创建持久态的znode,比支持多层创建.比如在创建/parent/child的情况下,无/parent.无法通过
//	 * 
//	 * @param path
//	 * @param data
//	 * @throws KeeperException
//	 * @throws InterruptedException
//	 * @author linwk 2016年1月6日
//	 */
//
//	public void create(String path, byte[] data) throws Exception {
//
//		if (StringUtils.isBlank(path) == true) {
//			throw new Exception("节点为空，不能创建！");
//		}
//		if (path.startsWith(rootPath) == false) {
//			throw new Exception("不是根节点开头，不能创建！");
//		}
//		zkService.createPath(path, new String(data));
//	}
//
//	/**
//	 * 是否存在节点
//	 * 
//	 * @param path
//	 * @return
//	 * @throws KeeperException
//	 * @throws InterruptedException
//	 * @author linwk 2016年1月6日
//	 */
//	public boolean exitPath(String path) throws Exception {
//		return this.zkService.exists(path);
//	}
//
//	/**
//	 * 获取子节点个数
//	 * 
//	 * @param path
//	 * @author linwk 2016年1月6日
//	 * @throws Exception
//	 */
//	public int getChildNum(String path) throws Exception {
//		return zkService.getSubPaths(path).size();
//	}
//
//	/**
//	 * 获取所有节点信息(加入id和parentId 显示到tree)
//	 * 
//	 * @return
//	 * @author nibili 2016年1月7日
//	 * @throws Exception
//	 */
//	public List<ZookeeperDto> getAll() throws Exception {
//		List<ZookeeperDto> listAll = Lists.newArrayList();
//		// 定义根节点
//		ZookeeperDto zookeeperModel = new ZookeeperDto();
//		zookeeperModel.setParentId("");
//		zookeeperModel.setId(this.rootPath);
//		zookeeperModel.setValue(this.rootPath);
//		zookeeperModel.setName(this.rootPath.substring(1).replaceAll("/", "."));
//		listAll.add(zookeeperModel);
//		listAll.addAll(this.findChilds(this.rootPath));
//
//		Collections.sort(listAll, new Comparator<ZookeeperDto>() {
//
//			@Override
//			public int compare(ZookeeperDto o1, ZookeeperDto o2) {
//
//				return o1.getName().compareTo(o2.getName());
//			}
//		});
//		return listAll;
//	}
//
//	/**
//	 * 获取子节点数，使用递归的方法
//	 * 
//	 * @param path
//	 * @return
//	 * @throws Exception
//	 * @author nibili 2016年1月7日
//	 */
//	private List<ZookeeperDto> findChilds(String path) throws Exception {
//		List<ZookeeperDto> list = Lists.newArrayList();
//		List<String> listTemp = this.zkService.getSubPaths(path);
//		if (CollectionUtils.isNotEmpty(listTemp) == true) {
//			// 存在子节点
//			for (String child : listTemp) {
//				// 遍历
//				ZookeeperDto zookeeperModel = new ZookeeperDto();
//				zookeeperModel.setParentId(path);
//				String childPath = path + "/" + child;
//				zookeeperModel.setId(childPath);
//				zookeeperModel.setValue(this.zkService.getPathValue(childPath));
//				zookeeperModel.setName(child);
//				list.add(zookeeperModel);
//				list.addAll(this.findChilds(childPath));
//			}
//		}
//		return list;
//	}
//
//	/**
//	 * 获取节点数据
//	 * 
//	 * @param path
//	 * @return
//	 * @throws KeeperException
//	 * @throws InterruptedException
//	 * @author linwk 2016年1月6日
//	 * @throws UnsupportedEncodingException
//	 */
//	public String getData(String path) throws Exception {
//		if (StringUtils.isNotBlank(path) == true) {
//			return new String(this.zkService.getPathValue(path));
//		} else {
//			throw new Exception("path不能为空!");
//		}
//	}
//
//	/**
//	 * 设置节点数据
//	 * 
//	 * @param path
//	 * @param mybyte
//	 * @throws KeeperException
//	 * @throws InterruptedException
//	 * @author nibili 2016年1月7日
//	 * @throws Exception
//	 */
//	public void setData(String path, byte[] mybyte) throws Exception {
//		if (StringUtils.isNotBlank(path) == true) {
//			this.zkService.updatePathValue(path, new String(mybyte));
//		} else {
//			throw new Exception("path不能为空!");
//		}
//	}
//
//	/**
//	 * 删除节点
//	 * 
//	 * @param path
//	 * @param version
//	 *            (-1,表示可以修改所有版本)
//	 * @throws InterruptedException
//	 * @throws KeeperException
//	 * @author linwk 2016年1月7日
//	 */
//	public void deletePath(String path) throws Exception {
//		if (StringUtils.isNotBlank(path) == true) {
//			this.zkService.deletePath(path);
//		} else {
//			throw new Exception("path不能为空!");
//		}
//	}

}
